#ifndef __ERROR_UTILS_H__
#define __ERROR_UTILS_H__

#include "../systemLog/systemLog.h"

/* 无操作的日志宏，可在不需要额外记录时传给 CALL_RET_AND_LOG */
#define LOG_NOOP(ret) \
    do                \
    {                 \
        (void)(ret);  \
    } while (0)

/*
 * CALL_RET_AND_LOG
 * label: const char*，用于标识调用位置（会写入日志）
 * expr:  需要执行的函数调用表达式（返回 system_error_code_t）
 * log_macro: 记录细节的宏，需接受一个 system_error_code_t 参数，例如 TASK_QUEUE_CHECK_INIT
 *
 * 功能：执行 expr，将返回值传给 log_macro 以便记录细节；若失败则追加一条带 label 的日志并返回该错误码。
 */
#define CALL_RET_AND_LOG(label, expr, log_macro)                                 \
    do                                                                           \
    {                                                                            \
        system_error_code_t _call_ret = (expr);                                  \
        log_macro(_call_ret);                                                    \
        if (_call_ret != SYSTEM_ERR_OK)                                          \
        {                                                                        \
            SYSTEM_LOG_ERROR(_call_ret, "%s failed ret=%d", (label), _call_ret); \
            return _call_ret;                                                    \
        }                                                                        \
    } while (0)

#endif /* __ERROR_UTILS_H__ */
